package mine.code.day.year2021.month10;

import org.junit.Test;

/**
 * 有一个密钥字符串 S ，只包含字母，数字以及 '-'（破折号）。其中， N 个 '-' 将字符串分成了 N+1 组。
 * <p>
 * 给你一个数字 K，请你重新格式化字符串，使每个分组恰好包含 K 个字符。特别地，第一个分组包含的字符个数必须小于等于 K，但至少要包含 1 个字符。两个分组之间需要用 '-'（破折号）隔开，并且将所有的小写字母转换为大写字母。
 * <p>
 * 给定非空字符串 S 和数字 K，按照上面描述的规则进行格式化。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：S = "5F3Z-2e-9-w", K = 4
 * 输出："5F3Z-2E9W"
 * 解释：字符串 S 被分成了两个部分，每部分 4 个字符；
 * 注意，两个额外的破折号需要删掉。
 *
 * @author caijinnan
 */
public class Day04_密钥格式化 {

    @Test
    public void run() {
        String s = "2-5g-3-J";
        int k = 2;
        System.out.println(licenseKeyFormatting(s, k));
    }

    public String licenseKeyFormatting(String s, int k) {
        String temp = s.replaceAll("-", "");
        int length = temp.length();
        String[] strArr;
        if (length % k == 0) {
            strArr = new String[length / k];
        } else {
            strArr = new String[length / k + 1];
        }
        for (int i = strArr.length - 1, startIndex = length - k; i >= 0; i--, startIndex -= k) {
            int end = startIndex + k;
            int start = Math.max(startIndex, 0);
            strArr[i] = temp.substring(start, end);
        }
        return String.join("-", strArr).toUpperCase();
    }
}
